package com.alibaba.citrus.ots.common.util;

import java.math.BigDecimal;
import java.math.RoundingMode;
import java.text.DecimalFormat;

/**
 * @author luyi
 * @date 2021/9/23 8:15 下午
 */
public class CalculatePercentage {

    /**
     * 计算获取百分比
     *
     * @param molecule    分子
     * @param denominator 分母
     * @return
     */
    public static BigDecimal retainTwo(Long molecule, Long denominator) {
        if (denominator == null || denominator == 0L) {
            return new BigDecimal("0");
        }
        DecimalFormat format = new DecimalFormat("0.00");
        return new BigDecimal(format.format((double) (molecule * 100) / denominator));
    }

    /**
     * 计算获取百分比
     *
     * @param molecule    分子
     * @param denominator 分母
     * @return
     */
    public static BigDecimal retainTwoBigDecimal(BigDecimal molecule, BigDecimal denominator) {
        if (denominator == null || BigDecimal.ZERO.equals(denominator)) {
            return new BigDecimal("0");
        }
        return molecule.divide(denominator, 2, RoundingMode.HALF_UP).multiply(new BigDecimal(100));
    }

    public static void main(String[] args) {
        System.out.println(retainTwoBigDecimal(new BigDecimal(10), new BigDecimal(100)));
    }
    /**
     * 计算获取百分比
     *
     * @param molecule    分子
     * @param denominator 分母
     * @return
     */
    public static BigDecimal retainTwoBigDecimalPercentage(BigDecimal molecule, BigDecimal denominator) {
        if (denominator == null || BigDecimal.ZERO.equals(denominator)) {
            return new BigDecimal("0");
        }
        return molecule.divide(denominator, 2, RoundingMode.HALF_UP);
    }

    /**
     * 计算获取百分比
     *
     * @param molecule    分子
     * @param denominator 分母
     * @return
     */
    public static BigDecimal retainTwoBigDecimalPercentage2(BigDecimal molecule, BigDecimal denominator) {
        if (denominator == null || BigDecimal.ZERO.equals(denominator)) {
            return new BigDecimal("0");
        }
        return  molecule.multiply(new BigDecimal("100")).divide(denominator, 2, RoundingMode.HALF_UP);
    }
}
